package com.bw.lib_common.base

import android.app.Application
import com.alibaba.android.arouter.BuildConfig
import com.alibaba.android.arouter.launcher.ARouter
import com.bw.lib_common.utils.AppHolder
import com.bw.lib_log.crash.CrashHandler
import com.bw.lib_storage.db.DBUtils
import com.tencent.bugly.crashreport.CrashReport
import com.tencent.mmkv.MMKV
import java.util.concurrent.ExecutorService
import java.util.concurrent.Executors

open class BaseApplication:Application(){
    companion object{
        lateinit var instance: BaseApplication
    }
    override fun onCreate() {
        super.onCreate()
        instance = this
        initARouter()
        initMMKV()
        //启动优化
        //线程池
        val executorService: ExecutorService = Executors.newCachedThreadPool()
        executorService.submit {
            initCrash()
            initBugLy()
            initRoom()
            initAppHolder()
        }

    }

    private fun initAppHolder() {
        AppHolder.getInstance().initialize(this)
    }

    private fun initRoom() {
        //初始化数据据库
        DBUtils.init(this,"club.db")
    }

    fun initMMKV(){
        //mmkv初始化
        MMKV.initialize(this)
    }

    fun initARouter(){
        // 这两行必须写在 init 之前，否则这些配置在 init 过程中将无效
        if (BuildConfig.DEBUG) {
            // 打印日志，方便调试，不要在 Release 模式开启
            ARouter.openLog()
            // 开启调试模式（如果在 InstantRun 模式下运行，必须开启调试模式！）
            ARouter.openDebug()
        }
        // 初始化 ARouter
        ARouter.init(this)
    }
    fun initCrash(){
        //Crash初始化
        CrashHandler.init(this)
    }
    fun initBugLy(){
        //bugly异常崩溃上报
        CrashReport.initCrashReport(this, "3f8b5a9db7", false) //true调试模式  false发布模式
    }
}